package com.example.service;


import com.example.enums.BookStatus;
import com.example.mapper.BookInfoMapper;
import com.example.model.BookInfo;
import com.example.dao.BookDao;
import com.example.model.PageRequest;
import com.example.model.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 图书业务逻辑层
 * 职责：处理图书相关的业务逻辑
 */
@Service
public class BookService {
    @Autowired
    private BookInfoMapper bookInfoMapper;

    /**
     * 获取图书列表业务方法
     * @return 处理后的图书列表
     */
    public List<BookInfo> getBookList() {
        // 创建数据访问层对象
        BookDao bookDao = new BookDao();

        // 调用数据访问层获取原始数据
        List<BookInfo> books = bookDao.mockData();

        // 业务逻辑处理：设置状态中文说明
        for (BookInfo book : books) {
            if (book.getStatus() == 1) {
                book.setStatusCN("可借阅");  // 业务规则：状态1对应"可借阅"
            } else {
                book.setStatusCN("不可借阅"); // 业务规则：其他状态对应"不可借阅"
            }
        }

        // 返回业务处理后的数据
        return books;
    }

    /**
     * 添加图书
     * @param bookInfo 图书信息
     */
    public void addBook(BookInfo bookInfo) {
        bookInfoMapper.insertBook(bookInfo);
    }


    /**
     * 分页查询图书列表
     * @param pageRequest 分页参数
     * @return 分页结果
     */
    public PageResult<BookInfo> getBookListByPage(PageRequest pageRequest) {
        // 查询总记录数
        Integer count = bookInfoMapper.count();
        // 分页查询图书列表
        List<BookInfo> books = bookInfoMapper.queryBookListByPage(pageRequest);

        // 设置状态中文描述
        for (BookInfo book : books) {
            book.setStatusCN(BookStatus.getNameByCode(book.getStatus()).getName());
        }

        return new PageResult<>(count, pageRequest, books);
    }


    public BookInfo queryBookById(Integer bookId) {
        return bookInfoMapper.queryBookById(bookId);
    }
    public void updateBook(BookInfo bookInfo) {
        bookInfoMapper.updateBook(bookInfo);
    }

    public void batchDeleteBook(List<Integer> ids) {
        if (ids == null || ids.isEmpty()) {
            return;
        }
        bookInfoMapper.batchDeleteBook(ids);
    }

}
